Micron Document
<!DOCTYPE html>
<html class="client-nojs vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-0 vector-toc-not-available vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-0 skin-theme-clientpref-day vector-sticky-header-enabled" lang="de" dir="ltr"><head>
<meta charset="UTF-8">
<title>Smalltalk (Programmiersprache)</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="icon" type="image/png" href="./_res_/favicon.png">
<link rel="canonical" href="https://de.wikipedia.org/wiki/Smalltalk_(Programmiersprache)"> <link href="./_mw_/ext.cite.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.pygments.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.wikimediamessages.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.icons.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.search.codex.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.styles.css" rel="stylesheet" type="text/css">
<meta name="ResourceLoaderDynamicStyles" content="">
<link href="./_mw_/ext.gadget.citeRef.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.defaultPlainlinks.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiCommonHide.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiCommonLayout.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiCommonStyle.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiDarkmode.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiResponsive.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.specialSearch.css" rel="stylesheet" type="text/css">
<link rel="stylesheet" type="text/css" href="./_mw_/site.styles.css">
<link rel="stylesheet" type="text/css" href="./_mw_/noscript.css">
<link rel="stylesheet" type="text/css" href="./_res_/footer.css">
<link rel="stylesheet" type="text/css" href="./_res_/vector-2022.css">
</head>
<body class="skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject page-Smalltalk_Programmiersprache rootpage-Smalltalk_Programmiersprache skin-vector-2022 action-view">
<div class="mw-page-container">
<div class="mw-page-container-inner">
<div class="mw-content-container">
<main id="content" class="mw-body">
<header class="mw-body-header vector-page-titlebar">
<h1 id="firstHeading" class="firstHeading mw-first-heading"><span class="mw-page-title-main">Smalltalk (Programmiersprache)</span></h1>
</header>
<a id="top"></a>
<div id="bodyContent" class="vector-body ve-init-mw-desktopArticleTarget-targetContainer" aria-labelledby="firstHeading" data-mw-ve-target-container="">
<div id="contentSub">
<div id="mw-content-subtitle"></div>
</div>
<div id="mw-content-text" class="mw-body-content mw-content-ltr" lang="de" dir="ltr"><div class="mw-content-ltr mw-parser-output" lang="de" dir="ltr"><table class="float-right infobox toccolours toptextcells" style="font-size:90%; margin-top:0; width:21em;">

<tbody><tr>
<th colspan="2" class="hintergrundfarbe6" style="font-size:larger;">Smalltalk
</th></tr>
<tr>
<td colspan="2" class="notheme" style="text-align:center; background-color:#f8f9fa;"><span class="mw-default-size" typeof="mw:File"></span>
</td></tr>


<tr>
<th colspan="2" class="hintergrundfarbe5" style="font-size:105%; text-align:center;">Basisdaten
</th></tr>


<tr>
<td><b>Erscheinungsjahr:</b>
</td>
<td>1972 (Entwicklung ab 1969)
</td></tr>
<tr>
<td><b>Designer:</b>
</td>
<td><a href="Alan_Kay" title="Alan Kay">Alan Kay</a>, <a href="Dan_Ingalls" title="Dan Ingalls">Dan Ingalls</a>, <a href="Adele_Goldberg" title="Adele Goldberg">Adele Goldberg</a>
</td></tr>
<tr>
<td><b>Entwickler:</b>
</td>
<td><a href="Alan_Kay" title="Alan Kay">Alan Kay</a>, <a href="Dan_Ingalls" title="Dan Ingalls">Dan Ingalls</a>, <a href="Adele_Goldberg" title="Adele Goldberg">Adele Goldberg</a>, Ted Kaehler, Scott Wallace, <a href="L_Peter_Deutsch" title="L Peter Deutsch">Peter Deutsch</a>
</td></tr>
<tr>
<td><b>Aktuelle&nbsp;<a href="Version_(Software)" title="Version (Software)">Version</a></b>
</td>
<td class="wikidata-content" style="white-space:nowrap;">ANSI Smalltalk<sup id="cite_ref-_7579ec16ab04dbc4_1-0" class="reference"><a href="#cite_note-_7579ec16ab04dbc4-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup>&nbsp;<small>(19. Mai 1998)</small>
</td></tr>


<tr>
<td><b><a href="Typisierung_(Informatik)" title="Typisierung (Informatik)">Typisierung</a>:</b>
</td>
<td><a href="Dynamische_Typisierung" title="Dynamische Typisierung">dynamisch</a>
</td></tr>
<tr>
<td><b>Wichtige <a href="Implementierung" title="Implementierung">Implementierungen</a>:</b>
</td>
<td><a href="Pharo_(Programmiersprache)" title="Pharo (Programmiersprache)">Pharo</a>, <a href="Squeak" title="Squeak">Squeak</a>, <a rel="nofollow" class="external text" href="https://cuis.st/">Cuis</a>, <a rel="nofollow" class="external text" href="http://haver.klix.ch/">Haver</a>, GNU Smalltalk, VisualWorks, Dolphin Smalltalk, Smalltalk/X, VA Smalltalk, OOVM
</td></tr>
<tr>
<td><b>Dialekte:</b>
</td>
<td><a href="Pharo_(Programmiersprache)" title="Pharo (Programmiersprache)">Pharo</a>
</td></tr>


<tr>
<td><b>Beeinflusst von:</b>
</td>
<td><a href="Lisp" title="Lisp">Lisp</a>, <a href="Simula" title="Simula">Simula</a>
</td></tr>
<tr>
<td><b>Beeinflusste:</b>
</td>
<td><a href="Objective-C" title="Objective-C">Objective-C</a>, <a href="Java_(Programmiersprache)" title="Java (Programmiersprache)">Java</a>, <a href="Ruby_(Programmiersprache)" title="Ruby (Programmiersprache)">Ruby</a>, <a href="Self_(Programmiersprache)" title="Self (Programmiersprache)">Self</a>, <a href="PHP" title="PHP">PHP</a> 5, Logtalk, <a href="Dylan_(Programmiersprache)" title="Dylan (Programmiersprache)">Dylan</a>, <a href="AppleScript" title="AppleScript">AppleScript</a>, <a href="NewtonScript" title="NewtonScript">NewtonScript</a>, <a href="Python_(Programmiersprache)" title="Python (Programmiersprache)">Python</a>, <a href="Groovy" title="Groovy">Groovy</a>, <a href="Scala_(Programmiersprache)" title="Scala (Programmiersprache)">Scala</a>, <a href="Raku_(Programmiersprache)" title="Raku (Programmiersprache)">Raku</a>, <a href="Common_Lisp_Object_System" title="Common Lisp Object System">Common Lisp Object System</a>, Falcon, <a href="Io_(Programmiersprache)" title="Io (Programmiersprache)">Io</a>, Ioke, Fancy, <a href="Strongtalk" title="Strongtalk">Strongtalk</a>
</td></tr>
<tr>
<td><b><a href="Betriebssystem" title="Betriebssystem">Betriebssystem</a>:</b>
</td>
<td><a href="Microsoft_Windows" title="Microsoft Windows">Windows</a>, <a href="Linux" title="Linux">Linux</a>, <a href="MacOS" title="MacOS">macOS</a>, uvm.
</td></tr>
<tr>
<td><b><a href="Lizenz" title="Lizenz">Lizenz</a>:</b>
</td>
<td>anwendungsspezifisch
</td></tr>
<tr>
<td colspan="2" class="hintergrundfarbe5" style="text-align:center;"><a rel="nofollow" class="external free" href="http://www.smalltalk.org/">http://www.smalltalk.org/</a>
</td></tr></tbody></table>
<p><b>Smalltalk</b> ist ein Sammelbegriff einerseits für eine <a href="Dynamische_Programmiersprache" title="Dynamische Programmiersprache">dynamische</a>, im Original untypisierte <a href="Objektorientierte_Programmierung" title="Objektorientierte Programmierung">objektorientierte Programmiersprache</a> und andererseits für eine vollständige <a href="Integrierte_Entwicklungsumgebung" title="Integrierte Entwicklungsumgebung">Entwicklungsumgebung</a>, die in den 1970er Jahren am <a href="Xerox_PARC" title="Xerox PARC">Xerox PARC</a> Forschungszentrum durch <a href="Alan_Kay" title="Alan Kay">Alan Kay</a>, <a href="Dan_Ingalls" title="Dan Ingalls">Dan Ingalls</a>, <a href="Adele_Goldberg" title="Adele Goldberg">Adele Goldberg</a> und andere entwickelt wurde. Sie wurde allgemein unter dem Namen Smalltalk-80 freigegeben und hat die Entwicklung vieler späterer Programmiersprachen, wie etwa <a href="Objective-C" title="Objective-C">Objective-C</a>, <a href="Java_(Programmiersprache)" title="Java (Programmiersprache)">Java</a> und <a href="Ruby_(Programmiersprache)" title="Ruby (Programmiersprache)">Ruby</a> beeinflusst. Smalltalk wurde von <a href="Lisp" title="Lisp">Lisp</a> mit seiner <a href="Garbage_Collection" title="Garbage Collection">automatischen Speicherbereinigung</a> und <a href="Simula" title="Simula">Simula</a> mit seinem Klassen-Konzept beeinflusst und gilt neben <a href="Simula" title="Simula">Simula-67</a> als eine der ersten objektorientierten Programmiersprachen.
</p><p>Smalltalk ist im Gegensatz zu Sprachen wie <a href="C%2B%2B" title="C++">C++</a> oder Java eine rein objektorientierte Programmiersprache, das heißt, Daten wie <i>Integer, Character</i> und ähnliche, die in anderen objektorientierten Sprachen zum Teil als <a href="Datentyp#Elementare_Datentypen" title="Datentyp">elementare Datentypen</a> repräsentiert werden, sind in Smalltalk ebenfalls über Objekte und zugehörige Klassen realisiert. Die Smalltalk-Entwicklungsumgebung enthielt viele Ideen, die später mit der <a href="Macintosh" title="Macintosh">Macintosh</a>- und <a href="Graphical_Environment_Manager" class="mw-redirect" title="Graphical Environment Manager">Atari-TOS/GEM</a>- und dann später auch Windows-Benutzeroberfläche verbreitet wurden. Verwendet wurde ein Grafikbildschirm mit verschiebbaren Fenstern, Aufklappmenüs und Schriften von verschiedener Größe. Eine Maus mit drei Tasten –&nbsp;rot, blau und gelb&nbsp;– diente erstmals als zusätzliches <a href="Eingabeger%C3%A4t" title="Eingabegerät">Eingabegerät</a>. Das Model-View-Controller-Konzept (<a href="Model_View_Controller" title="Model View Controller">MVC</a>) spielte in der Smalltalk-80-Entwicklungsumgebung eine wesentliche Rolle.
</p>

<div class="mw-heading mw-heading2"><h2 id="Wichtige_Eigenschaften_von_Smalltalk">Wichtige Eigenschaften von Smalltalk</h2></div>
<ul><li>Alles in Smalltalk ist ein Objekt, auch <a href="Zeichenkette" title="Zeichenkette">Zeichenketten</a>, <a href="Integer_(Datentyp)" title="Integer (Datentyp)">Integer</a>, <a href="Boolesche_Algebra" title="Boolesche Algebra">boolesche Werte</a>, Klassen(-definitionen), ausführbarer Code, Stackframes, der Speicher, Codeblöcke etc.</li>
<li>Objekte werden dadurch aktiviert, dass man ihnen Nachrichten (englisch „messages“) schickt. Dies führt dazu, dass die entsprechende Methode (Funktion) des Objekts ausgeführt wird.</li>
<li>Der gesamte <a href="Quelltext" title="Quelltext">Quelltext</a> ist in der Regel offen und kann somit verändert werden. Nur sehr wenige Methoden greifen auf echte 'Primitives' der virtuellen Maschine zurück.</li>
<li><a href="Dynamische_Bindung" title="Dynamische Bindung">Dynamische Bindung</a> – erst zur Laufzeit wird ermittelt, welche <a href="Objektorientierte_Programmierung" title="Objektorientierte Programmierung">Methode</a> tatsächlich aufgerufen wird. Eine frühe („statische“) Bindung, wie dies bei der <a href="Statische_Typisierung" title="Statische Typisierung">statischen Typisierung</a> vorgesehen ist, wurde in der Smalltalk-Programmiersprache bewusst ausgespart.</li>
<li>Vererbung: In den meisten Smalltalk-Systemen ist jede Klasse (außer der Wurzelklasse <code>Object</code> oder <code>ProtoObject</code>) von genau einer Oberklasse abgeleitet, deren Verhalten sie erbt und beliebig erweitern kann (keine Mehrfachvererbung). Smalltalk-80 unterstützt allerdings eine einfache Form der Mehrfachvererbung.<sup id="cite_ref-2" class="reference"><a href="#cite_note-2"><span class="cite-bracket">[</span>2<span class="cite-bracket">]</span></a></sup></li>
<li><a href="Automatische_Speicherbereinigung" class="mw-redirect" title="Automatische Speicherbereinigung">Automatische Speicherbereinigung</a> (englisch <i>garbage collection</i>), die nicht durch den Programmierer beeinflusst werden kann. Ein Objekt existiert so lange, wie es von anderen Objekten <a href="Referenz_(Programmierung)" title="Referenz (Programmierung)">referenziert</a> wird.</li>
<li>Smalltalkprogramme werden in <a href="Bytecode" title="Bytecode">Bytecode</a> kompiliert, der durch eine <a href="Virtuelle_Maschine" title="Virtuelle Maschine">virtuelle Maschine</a> übersetzt wird. Ursprünglich wurde der Bytecode zu nativem Maschinencode interpretiert; kommerzielle Umgebungen arbeiten inzwischen fast ausschließlich mit dynamischer Übersetzung.</li>
<li>Die Programmierumgebung erlaubt Änderungen im Quelltext, während das Programm läuft, und setzt diese unmittelbar während der Laufzeit um.</li>
<li>Die Quelltexteingabe erfolgt in einem <a href="Klassenbrowser" title="Klassenbrowser">Klassenbrowser</a>. Moderne <a href="Refactoring" title="Refactoring">Refactoring</a>-Browser setzen sich allmählich gegen einfache Klassenbrowser durch, weil sie automatisierte Refactoring-Funktionen unterstützen und damit die Produktivität nochmals erheblich steigern, ähnlich wie sich <a href="Eclipse_(IDE)" title="Eclipse (IDE)">Eclipse</a> in der Java-Welt etabliert hat.</li>
<li>Eine typische Eigenschaft im Vergleich zu nicht-objektorientierten Sprachen ist, dass die Kontrollstrukturen wie <i>if-then-else</i>, <i>for</i>, <i>while</i> nicht in die Sprache eingebaut sind. Zum Beispiel wird eine If-Anweisung ausgeführt, indem eine <i>ifTrue:</i>-Botschaft an ein boolesches Objekt gesandt wird. Als Parameter wird ein Block (Anweisungsfolge) übergeben. Lediglich in der Klasse <code>True</code> wird dieser Block ausgeführt. In der Klasse <code>False</code> ist diese Methode zwar auch implementiert, aber sie führt den Block nicht aus.</li>
<li>Das gesamte System (inklusive Entwicklungswerkzeugen) wird in einem Image gespeichert.</li></ul>
<p>Es gibt nur drei fest integrierte ausführbare Funktionen:
</p>
<ul><li>eine Botschaft an ein Objekt senden</li>
<li>ein Objekt einer Variablen zuweisen</li>
<li>ein Objekt als Rückgabewert einer Methode liefern</li></ul>
<div class="mw-heading mw-heading2"><h2 id="Geschichte_und_Bedeutung_von_Smalltalk">Geschichte und Bedeutung von Smalltalk</h2></div>
<div class="mw-heading mw-heading3"><h3 id="1970–1980"><span id="1970.E2.80.931980"></span>1970–1980</h3></div>
<p>In diese Zeit fällt die Entwicklung der ersten Versionen von Smalltalk-71, Smalltalk-72, Smalltalk-74 und Smalltalk-76<sup id="cite_ref-3" class="reference"><a href="#cite_note-3"><span class="cite-bracket">[</span>3<span class="cite-bracket">]</span></a></sup> bis hin zum heute verbreiteten Standard Smalltalk-80 am Forschungszentrum Xerox PARC.
</p>
<div class="mw-heading mw-heading3"><h3 id="1980–1990"><span id="1980.E2.80.931990"></span>1980–1990</h3></div>
<p>Die Programmierung mit Klassenbrowser und die Verwendung einer virtuellen Maschine zur Ausführung stellte von Anfang an gewisse Mindestanforderungen an die Hardware. Dies geschah zu einer Zeit, in der die erschwinglichen Computer nicht über grafische Benutzeroberflächen verfügten und die <a href="Rechenleistung" title="Rechenleistung">Rechenleistung</a> nicht für eine solche ausreichte. Smalltalk war seiner Zeit voraus und konnte zu Beginn nur auf Workstations effektiv eingesetzt werden. Im Ergebnis gab es daher nur wenige Smalltalk-Entwickler – dafür umso mehr C-Programmierer.
Mit dem Aufkommen der grafischen Benutzeroberflächen im Mikrocomputerbereich entstand das objektorientierte C++, und da die meisten Entwickler C bereits kannten, konnte sich C++ sehr schnell verbreiten, sodass Smalltalk eine Nischenprogrammiersprache blieb. Im Gegensatz zu C und C++ legte Smalltalk auch auf hohe Ausführungsgeschwindigkeiten keinen besonderen Wert (Alan Kay: „It's still fast enough for our neurons“).
</p>
<div class="mw-heading mw-heading3"><h3 id="1990–2000"><span id="1990.E2.80.932000"></span>1990–2000</h3></div>
<p>Anfang und Mitte der 1990er Jahre wurde Smalltalk in vielen Bereichen populär, in denen es auf die Beherrschung von Komplexität ankam (z.&nbsp;B. bei <a href="Expertensystem" title="Expertensystem">Expertensystemen</a>). Verschiedene große Anbieter wie IBM begannen, Smalltalk stark zu unterstützen und in Großkundenprojekten einzusetzen. Es gab eine sprunghafte Zunahme verschiedener Implementierungen von Smalltalk. Mit dem Internet-Boom und dem davon profitierenden Java büßte Smalltalk Ende der 1990er Jahre seine gerade aufkommende Popularität jedoch wieder ein.
</p><p>In Java wurden einige Konzepte von Smalltalk (wie z.&nbsp;B. die virtuelle Maschine und der <a href="Garbage_Collector" class="mw-redirect" title="Garbage Collector">Garbage Collector</a>) übernommen. Die Syntax war jedoch wieder an C angelehnt. Auch kamen erneut nicht-objektorientierte Mittel zum Einsatz, wie die Vermischung der Objektorientierung mit einfachen Datentypen und imperative Strukturen, geringe Selbstbezüglichkeit und der Edit-Compile-Test-Debug-Zyklus mit Quellcode als reiner Textdatei etc. Java bot dafür Normierung, Aufstiegspfade für C-Programmierer und nicht zuletzt Allianzmöglichkeiten gegen die MS-Windows-Dominanz. Zudem wurde es von Sun Microsystems kostenlos zur Verfügung gestellt.
</p><p>Das Ende des kurzen Smalltalk-Booms wurde durch den Niedergang der Firma ParcPlace unterstrichen, die als Ausgründung des Xerox PARC mit VisualWorks<sup id="cite_ref-4" class="reference"><a href="#cite_note-4"><span class="cite-bracket">[</span>4<span class="cite-bracket">]</span></a></sup> (heute bei Cincom)<sup id="cite_ref-5" class="reference"><a href="#cite_note-5"><span class="cite-bracket">[</span>5<span class="cite-bracket">]</span></a></sup> den direkten Nachfolger der Originalimplementierung anbot, der die damals mächtigste Smalltalk-Entwicklungsumgebung darstellte: Mit VisualWorks geschaffene Anwendungen liefen bereits 1991 bitkompatibel (durch VM) unter <a href="Windows" class="mw-redirect" title="Windows">Windows</a>, <a href="Mac_OS_Classic" class="mw-redirect" title="Mac OS Classic">Mac OS Classic</a>, <a href="Solaris_(Betriebssystem)" title="Solaris (Betriebssystem)">Solaris</a> (und anderen <a href="Unix" title="Unix">Unix</a>-Systemen) und konnte ab 1994 deren verschiedene Benutzeroberflächen mit „Camelon View“ unabhängig vom Laufzeitsystem simulieren. Ein Konkurrent zu VisualWorks war die auf Windows und <a href="OS/2" title="OS/2">OS/2</a> zugeschnittene Entwicklungsumgebung <i>Smalltalk/V</i> (später <i>Visual Smalltalk Enterprise</i> genannt) der Firma Digitalk,<sup id="cite_ref-6" class="reference"><a href="#cite_note-6"><span class="cite-bracket">[</span>6<span class="cite-bracket">]</span></a></sup> die zuletzt bei Cincom erhältlich war.<sup id="cite_ref-7" class="reference"><a href="#cite_note-7"><span class="cite-bracket">[</span>7<span class="cite-bracket">]</span></a></sup>
</p><p>Obwohl Smalltalk sehr leicht zu erlernen (nur wenige Sprachkonstrukte) und zu debuggen ist (selten ist eine zeitaufwendige explizite Neukompilierung und -erstellung sowie ein Neustart des Programms erforderlich) und das Problem mit der Ausführungsgeschwindigkeit – zum Teil durch effektivere Implementierungen, zum Teil durch leistungsfähigere Hardware – inzwischen gelöst ist, wird Smalltalk heute noch immer in wenigen Bereichen eingesetzt. Einer der Gründe hierfür kann in der mangelnden Einheitlichkeit der Programmbibliotheken verschiedener Implementationen gesehen werden, von denen bisher keine eine „natürliche Dominanz“ (wie die von Sun Microsystems für Java) entwickelt hat.
</p><p>Nachdem ParcPlace als Player ausgeschieden war, IBM sein Smalltalk-Engagement zugunsten von Java eingestellt hatte und verschiedene zunächst erfolgversprechende Smalltalk-Implementierungen eingestellt worden waren (z.&nbsp;B. Dolphin Smalltalk 2007), gab es nur noch wenige überzeugte Anhänger, die an einen großen Durchbruch glaubten. Smalltalk blieb weiter ein Insiderthema.
</p>
<div class="mw-heading mw-heading3"><h3 id="Seit_2000">Seit 2000</h3></div>
<p>In den letzten Jahren gibt es mit der Etablierung von <a href="Freie_Software" title="Freie Software">freien Implementierungen</a> eine Art Renaissance von Smalltalk. Insbesondere das von ursprünglichen Smalltalk-Erfindern entwickelte plattformübergreifende Squeak und das darauf aufbauende <i>Croquet</i> erhalten wachsende Unterstützung aus Wissenschaft, IT-Industrie und einer großen freien Entwickler-<a href="Online-Community" title="Online-Community">Community</a>. Squeak wurde erstmals im September 1996 als erstes freies Smalltalk veröffentlicht. Dan Ingalls, Ted Kaehler, John Maloney, Scott Wallace und Alan Kay schreiben, dass hier geglückt sei, was 1980 fehlschlug.<sup id="cite_ref-8" class="reference"><a href="#cite_note-8"><span class="cite-bracket">[</span>8<span class="cite-bracket">]</span></a></sup>
</p><p>Alan Kays Konzept einer interaktiven, computer- und netzwerkvermittelten Interaktion, das <a href="Dynabook" title="Dynabook">Dynabook</a>, ist Bestandteil in der Softwareentwicklung für das <i><a href="One_Laptop_per_Child" class="mw-redirect" title="One Laptop per Child">One Laptop per Child</a></i>-Projekt.<sup id="cite_ref-9" class="reference"><a href="#cite_note-9"><span class="cite-bracket">[</span>9<span class="cite-bracket">]</span></a></sup> Standardmäßig werden auf den Schülerlaptops <i>EToys</i>, auf Squeak basierende Bausteine, installiert.
</p><p>Mit Croquet wird, mit dem Hintergrund des heutigen Wissensstands, erneut eine Antwort auf die generelle Frage nach der optimalen Computer-Mensch-Schnittstelle gesucht. In den 1980er Jahren war dies die – erstmals mit Smalltalk implementierte – zweidimensionale grafische Benutzeroberfläche, die ihre Verbreitung durch Apple und Microsoft fand. Heute sehen Alan Kay und andere darin eine dreidimensionale, plattformunabhängige, vernetzte Multibenutzerumgebung, in der Objekte fließend zwischen den verschiedenen teilnehmenden Rechnern ausgetauscht werden können. Die dazu notwendigen Eigenschaften besitzt nach Auffassung der Mitglieder des 2001 gestarteten und 2007 veröffentlichten Croquet-Projektes speziell <a href="Squeak" title="Squeak">Squeak Smalltalk</a>, welches das ursprünglich zur Implementierung vorgesehene Java daher ersetzte.
</p><p>2008 startete das <a href="Pharo_(Programmiersprache)" title="Pharo (Programmiersprache)">Pharo</a>-Projekt, das auf der Basis von Squeak eine freie, stabile Smalltalk-Plattform bietet, um weitere Anwendungsbereiche mit freiem Smalltalk zu erreichen.
</p><p>Am 15. April 2019 wurde VisualWorks 8.3.2 von Cincom Systems veröffentlicht. Cincom übernahm VisualWorks 1999 von Objectshare.<sup id="cite_ref-10" class="reference"><a href="#cite_note-10"><span class="cite-bracket">[</span>10<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading2"><h2 id="Image-Konzept">Image-Konzept</h2></div>
<p>Während die meisten Programmiersprachen ihren Quellcode in Dateien verwalten, die direkt über einen Editor bzw. eine Entwicklungsumgebung bearbeitet werden, wurde das ursprüngliche Smalltalk-80 von Xerox PARC mit einem Image-Konzept<sup id="cite_ref-11" class="reference"><a href="#cite_note-11"><span class="cite-bracket">[</span>11<span class="cite-bracket">]</span></a></sup> aufgebaut. Dabei bildet die Virtuelle Maschine mit einer Source-Datei und einer Image-Datei nicht nur Quellcode, sondern auch den gesamten Systemzustand (Objekte mit Zustandsinformation) ab. Die Image-Datei enthält hierzu einen Snapshot des gesamten Systems. Für Einsteiger etwas verwirrend ist, dass auch die Entwicklungsumgebung (Compiler, Editor, Debugger) in ihrem aktuellen Zustand gespeichert wird. Beim erneuten Starten des Systems wird aus der Image-Datei dann der Systemzustand der letzten Sitzung restauriert. Image- und Source-Datei bilden ein festes Tandem, welches auch immer gemeinsam gespeichert werden muss. Die endgültige Auslieferung einer Anwendung wird dadurch etwas komplizierter, da aus dem Image durch den Vorgang des Strippens alle nicht laufzeitrelevanten Anteile (z.&nbsp;B. der Debugger) entfernt werden müssen.
</p><p>Moderne Varianten von Smalltalk weichen hiervon leicht ab, indem z.&nbsp;B. bei ENVY eine eigene Verwaltung der Systemelemente dazwischen geschaltet wurde oder in Pharo der Quellcode mit Git verwaltet werden kann.
</p><p>Der Umfang der Klassenbibliothek und die Komplexität des Gesamtsystems (welches durch das Image-Konzept noch gesteigert wird) erschwert den Einstieg für Anfänger, was ein Zitat von <a href="Joe_Armstrong_(Informatiker)" title="Joe Armstrong (Informatiker)">Joe Armstrong</a> drastisch beschreibt: “You wanted a banana but what you got was a gorilla holding the banana and the entire jungle.”<sup id="cite_ref-12" class="reference"><a href="#cite_note-12"><span class="cite-bracket">[</span>12<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading2"><h2 id="Typisierte_Variante_von_Smalltalk">Typisierte Variante von Smalltalk</h2></div>
<p>Smalltalk verfügt nicht über ein statisches Typsystem. Insbesondere findet man dort keine Typdefinitionen und Typannotationen an Variablen oder für die Ein-/Ausgabeparameter von Methoden. Demgemäß finden auch keinerlei Typprüfungen bei Wertzuweisungen statt, wie dies für typisierte Sprachen üblich ist, und zwar weder dynamisch (zur Laufzeit) noch statisch (zur Übersetzungszeit). Die Klassenhierarchie von Smalltalk darf nicht mit einer Subtypenhierarchie verwechselt werden – auch wenn moderne objektorientierte Programmiersprachen oftmals Typ- und Klassendefinitionen als einen einzigen Vorgang betrachten, handelt es sich hier um unterschiedliche Konzepte und auch unterschiedliche Komponenten des Übersetzers und des Laufzeitsystems einer Sprache. Smalltalk verfügt hinsichtlich der Bildung und Prüfung von Typen über keine solche Komponente.
</p><p>Es gibt allerdings Varianten von Smalltalk, die über ein statisches Typsystem verfügen, so etwa <a href="Strongtalk" title="Strongtalk">Strongtalk</a>. Strongtalk ermöglicht die klassenunabhängige Definition von Typen in einer eigenen Typhierarchie und in der Folge auch die Annotation solcher Typen an Variablen und Methoden.
</p>
<div class="mw-heading mw-heading2"><h2 id="Ausdrücke_(Expressions)"><span id="Ausdr.C3.BCcke_.28Expressions.29"></span>Ausdrücke (Expressions)</h2></div>
<p>Ausdrücke haben folgende Form:
</p>
<div class="mw-highlight mw-highlight-lang-smalltalk mw-content-ltr" dir="ltr"><pre><span></span> <span class="nv">objekt</span> <span class="nf">nachricht</span>
</pre></div>
<p>Das heißt, man sendet einem Objekt eine Nachricht. Das Objekt antwortet mit einem Antwortobjekt. Ausdrücke müssen mit einem Punkt getrennt werden.
</p><p>Es gibt drei Arten von Nachrichten, unäre Nachrichten, binäre Nachrichten und Schlüsselwort-Nachrichten.
</p><p>Unäre Nachrichten haben keinen Parameter und bestehen aus einem Bezeichner:
</p>
<div class="mw-highlight mw-highlight-lang-smalltalk mw-content-ltr" dir="ltr"><pre><span></span> <span class="nv">objekt</span> <span class="nf">nachricht</span>
</pre></div>
<p>Eine binäre Nachricht hat genau einen Parameter und besteht aus einem oder mehreren Sonderzeichen. Vier Beispiele:
</p>
<div class="mw-highlight mw-highlight-lang-smalltalk mw-content-ltr" dir="ltr"><pre><span></span> <span class="m">1</span> <span class="nf">+</span> <span class="m">3</span>
<span class="nf">100</span> <span class="err">@</span> <span class="m">200</span>
<span class="nf">vorname</span> <span class="nf">,</span> <span class="nv">nachname</span>
<span class="nf">10</span> <span class="err">//</span> <span class="m">3</span>
</pre></div>
<p>Die meisten arithmetischen Operationen sind in Smalltalk als binäre Nachrichten implementiert.
</p><p>Eine Schlüsselwort-Nachricht hat einen oder mehrere Parameter, wobei vor den Parametern Doppelpunkte stehen.
</p>
<div class="mw-highlight mw-highlight-lang-smalltalk mw-content-ltr" dir="ltr"><pre><span></span> <span class="nv">objekt</span> <span class="nf">nachricht:</span> <span class="nv">parameter</span>
</pre></div>
<p>Diese Schlüsselwort-Nachricht heißt <code>nachricht:</code> und hat einen Parameter <code>parameter</code>.
</p>
<div class="mw-highlight mw-highlight-lang-smalltalk mw-content-ltr" dir="ltr"><pre><span></span> <span class="nv">objekt</span> <span class="nf">nachricht:</span> <span class="nv">parameter1</span> <span class="nf">nachricht:</span> <span class="nv">parameter2</span>
</pre></div>
<p>Diese Schlüsselwort-Nachricht heißt <code>nachricht:nachricht:</code> und hat zwei Parameter. D.&nbsp;h. Parameter können bei Schlüsselwort-Nachrichten mitten in die Nachricht eingefügt werden. Diese Besonderheit macht es möglich, in Smalltalk besonders leicht lesbare Programme zu schreiben:
</p>
<div class="mw-highlight mw-highlight-lang-smalltalk mw-content-ltr" dir="ltr"><pre><span></span> <span class="nv">collection</span> <span class="nf">copyFrom:</span> <span class="m">1</span> <span class="nf">to:</span> <span class="m">10</span>
</pre></div>
<p>Das klingt wie ein Satz. In Java würde man das folgendermaßen schreiben:
</p>
<div class="mw-highlight mw-highlight-lang-smalltalk mw-content-ltr" dir="ltr"><pre><span></span> <span class="nv">collection</span><span class="p">.</span><span class="nv">copyFromTo</span>(<span class="m">1</span><span class="nf">,</span> <span class="m">10</span>)<span class="p">;</span>
</pre></div>
<p>Ausdrücke können kombiniert und mit Klammern geschachtelt werden. Ohne Klammern werden Ausdrücke in folgender Reihenfolge ausgeführt:
Unäre Nachrichten vor binären Nachrichten vor Schlüsselwort-Nachrichten. Bei „gleichrangigen“ Nachrichten erfolgt die Auswertung von links nach rechts.
</p><p>Sollen einem Objekt in Folge mehrere Nachrichten geschickt werden, besteht die Möglichkeit, diese Nachrichten mit einem Semikolon (<i>;</i>) zu verketten:
</p>
<div class="mw-highlight mw-highlight-lang-smalltalk mw-content-ltr" dir="ltr"><pre><span></span> <span class="nv">objekt</span>
<span class="nf">nachricht1</span><span class="p">;</span>
<span class="nf">nachricht2</span><span class="p">;</span>
<span class="nf">nachricht3</span>
</pre></div>
<div class="mw-heading mw-heading2"><h2 id="Zuweisungen">Zuweisungen</h2></div>
<p>Eine Zuweisung hat folgende Form:
</p>
<div class="mw-highlight mw-highlight-lang-smalltalk mw-content-ltr" dir="ltr"><pre><span></span> <span class="nv">variable</span> <span class="o">:=</span> <span class="nv">ausdruck</span>
</pre></div>
<p>Zugewiesen wird in Smalltalk nur die Referenz auf ein Objekt.
</p>
<div class="mw-heading mw-heading2"><h2 id="Blöcke"><span id="Bl.C3.B6cke"></span>Blöcke</h2></div>
<p>Blöcke sind Sequenzen von Zuweisungsanweisungen und Ausdrücken. Sie werden durch eckige Klammern eingeschlossen. Blöcke können parameterlos sein oder auch Parameter aufweisen.
</p>
<div class="mw-highlight mw-highlight-lang-smalltalk mw-content-ltr" dir="ltr"><pre><span></span> <span class="nv">blockEins</span> <span class="o">:=</span> [ <span class="nc">Anweisungen</span> ]
<span class="nf">blockZwei</span> <span class="o">:=</span> [ <span class="o">:</span><span class="nv">einParameter</span> <span class="o">|</span> <span class="nc">Transcript</span> <span class="nf">show:</span> <span class="nv">einParameter</span> ]
</pre></div>
<p>Blöcke sind First Class Objekte. Sie können als Argument übergeben werden, oder als Rückgabewert eines Methodenaufrufs oder einer Blockevaluierung zurückgeliefert werden. Blöcke halten eine Referenz auf ihren Kontext, so dass bei deren Ausführung umgebende Variablen erreichbar sind (entsprechend ihrer statischen Sichtbarkeit). Blöcke entsprechen damit den Closures, wie sie aus vielen funktionalen Sprachen (z.&nbsp;B. Scheme) bekannt sind.
Zur Ausführung eines Blocks wird diesem eine Variante der value-Nachricht geschickt, wobei die Anzahl der mitgegebenen Parameter der Anzahl der Blockargumente entsprechen muss:
</p>
<div class="mw-highlight mw-highlight-lang-smalltalk mw-content-ltr" dir="ltr"><pre><span></span> <span class="nv">blockEins</span> <span class="nf">value</span>
<span class="nf">blockZwei</span> <span class="nf">value:</span> <span class="s">'Test'</span>
</pre></div>
<div class="mw-heading mw-heading2"><h2 id="Kontrollstrukturen">Kontrollstrukturen</h2></div>
<p>Die Kontrollstrukturen werden mit booleschen Ausdrücken und Blöcken implementiert. Ein boolescher Ausdruck liefert nach der Auswertung ein boolesches Objekt. Diesem wird dann eine Message zugesandt, die als Parameter einen ausführbaren Block hat.
Der Programmtext sieht aber ähnlich wie bei anderen Programmiersprachen aus, so dass man wie dort einfach gewisse Kontrollstrukturen als gegeben anwenden kann.
</p><p>Einige Beispiele.
</p>
<div class="mw-heading mw-heading3"><h3 id="IF-Anweisung">IF-Anweisung</h3></div>
<div class="mw-highlight mw-highlight-lang-smalltalk mw-content-ltr" dir="ltr"><pre><span></span> <span class="nv">aBoolean</span> <span class="nb">ifTrue:</span> [ <span class="c">"ein Block mit Anweisungen"</span> ]
</pre></div>
<p>oder
</p>
<div class="mw-highlight mw-highlight-lang-smalltalk mw-content-ltr" dir="ltr"><pre><span></span> ( <span class="nv">einAusdruck</span> ) <span class="nb">ifTrue:</span> [ <span class="c">"ein Block mit Anweisungen"</span> ]
</pre></div>
<p>Das aus anderen Programmiersprachen bekannte <i>else</i> sieht folgendermaßen aus:
</p>
<div class="mw-highlight mw-highlight-lang-smalltalk mw-content-ltr" dir="ltr"><pre><span></span> <span class="nv">aBoolean</span> <span class="nb">ifTrue:</span> [ ... ] <span class="nb">ifFalse:</span> [ ... ]
</pre></div>
<div class="mw-heading mw-heading3"><h3 id="Schleifen">Schleifen</h3></div>
<div class="mw-highlight mw-highlight-lang-smalltalk mw-content-ltr" dir="ltr"><pre><span></span> <span class="m">10</span> <span class="nb">timesRepeat:</span> [ <span class="nc">Transcript</span> <span class="nf">show:</span> <span class="s">'.'</span> ]<span class="p">.</span>
<span class="m">1</span> <span class="nf">to:</span> <span class="m">10</span> <span class="nf">do:</span> [ <span class="o">:</span><span class="nv">i</span> <span class="o">|</span> <span class="nc">Transcript</span> <span class="nf">show:</span> <span class="nv">i</span> <span class="nf">printString</span> ]<span class="p">.</span>
[ <span class="c">"ein Block, der ein boolesches Objekt zurückgibt"</span> ] <span class="nf">whileTrue</span><span class="p">.</span>
[ <span class="c">"ein Block, der ein boolesches Objekt zurückgibt"</span> ] <span class="nf">whileFalse</span><span class="p">.</span>
[ <span class="c">"ein Block, der ein boolesches Objekt zurückgibt"</span> ] <span class="nb">whileTrue:</span> [ <span class="c">"Block mit Schleifenrumpf"</span> ]<span class="p">.</span>
[ <span class="c">"ein Block, der ein boolesches Objekt zurückgibt"</span> ] <span class="nb">whileFalse:</span> [ <span class="c">"Block mit Schleifenrumpf"</span> ]
</pre></div>
<div class="mw-heading mw-heading2"><h2 id="Collections">Collections</h2></div>
<p>Die Smalltalkumgebungen sind mit einer großen Klassenbibliothek ausgestattet. Ein wichtiger allgemeiner Objekttyp (Klasse) sind die <i>Collections</i>, d.&nbsp;h. Sammlungen von Objekten. Die Klasse <i>Collection</i> steht an der Wurzel einer ganzen Hierarchie von Klassen.
</p><p>Eine wichtige Arbeit, die man mit einem Collection-Objekt durchführen kann, ist für jedes Element der Collection einen Block von Anweisungen auszuführen. Andere Programmiersprachen brauchen hierfür spezielle Konstrukte (<a href="Iterator" title="Iterator">Iteratoren</a>).
</p>
<div class="mw-highlight mw-highlight-lang-smalltalk mw-content-ltr" dir="ltr"><pre><span></span> <span class="nv">aCollection</span> <span class="nf">do:</span> [ <span class="o">:</span><span class="nv">einElement</span> <span class="o">|</span> <span class="nv">einElement</span> <span class="nf">auszuführendeArbeitFürDiesesElement</span> ]
</pre></div>
<p>Es hat sich eingebürgert, den Parameter als <i>each</i> zu bezeichnen, sodass direkt klar ist, was hierbei gemeint ist. Bei Verwendung von mehreren Collections sollte man dem noch eine genaue Bezeichnung nachsetzten. Iteriert man bspw. über alle x und y Werte aus zwei unterschiedlichen Collections:
</p>
<div class="mw-highlight mw-highlight-lang-smalltalk mw-content-ltr" dir="ltr"><pre><span></span> <span class="nv">xWerte</span> <span class="nf">do:</span> [<span class="o">:</span><span class="nv">eachX</span> <span class="o">|</span> <span class="nv">yWerte</span> <span class="nf">do:</span> [<span class="o">:</span><span class="nv">eachY</span> <span class="o">|</span> <span class="nv">map</span> <span class="nf">addPoint:</span> <span class="nv">eachX</span> <span class="nf">withY:</span> <span class="nv">eachY</span>]]
</pre></div>
<div class="mw-heading mw-heading2"><h2 id="Programmbeispiel">Programmbeispiel</h2></div>
<p>Das HelloWorld-Beispiel sieht wie folgt aus:
</p>
<div class="mw-highlight mw-highlight-lang-smalltalk mw-content-ltr" dir="ltr"><pre><span></span> <span class="nc">Transcript</span> <span class="nf">show:</span> <span class="s">'Hello World!'</span><span class="p">.</span>
</pre></div>
<p><code>Transcript</code> ist eine in jeder Smalltalkumgebung vordefinierte globale Variable, die ein Objekt enthält, auf dem man Dinge protokollieren kann (ein Ausgabefenster).
</p><p>Diesem Objekt wird die folgende Nachricht geschickt:
</p>
<div class="mw-highlight mw-highlight-lang-smalltalk mw-content-ltr" dir="ltr"><pre><span></span> <span class="nf">show:</span> <span class="nv">aString</span>
</pre></div>
<p>Ein bereits etwas komplexeres Beispiel:
</p>
<div class="mw-highlight mw-highlight-lang-smalltalk mw-content-ltr" dir="ltr"><pre><span></span> <span class="s">'Hello World'</span> <span class="nf">do:</span> [ <span class="o">:</span><span class="nv">eachChar</span><span class="o">|</span>
<span class="nc">Transcript</span> <span class="nf">show:</span> <span class="nv">eachChar</span> <span class="nf">asString</span><span class="p">;</span> <span class="nf">cr</span><span class="p">.</span>
]<span class="p">.</span>
</pre></div>
<p>gibt den Text „Hello World“ vertikal aus. 'Hello World' ist ein String (Zeichenkette). Die Klasse dieses Objektes ist eine Unterklasse von Collection. Ein String ist also eine Collection (=&nbsp;Sammlung) von Zeichen. Indem wir dem Objekt String die Nachricht
</p>
<div class="mw-highlight mw-highlight-lang-smalltalk mw-content-ltr" dir="ltr"><pre><span></span> <span class="nv">aString</span> <span class="nf">do:</span> [ <span class="o">:</span><span class="nv">eachChar</span> <span class="o">|</span> <span class="nc">OperationenMitDiesemBuchstaben</span> ]
</pre></div>
<p>senden, gehen wir alle Buchstaben (Elemente) des Strings einzeln durch.
</p><p>Das <i>Dictionary</i> (in <a href="Perl_(Programmiersprache)" title="Perl (Programmiersprache)">Perl</a> <i>Hash</i>, in Java <i>Map</i>) ist eine in Smalltalk häufig verwendete Datenstruktur:
</p>
<div class="mw-highlight mw-highlight-lang-smalltalk mw-content-ltr" dir="ltr"><pre><span></span> <span class="nv">d</span> <span class="o">:=</span> <span class="nc">Dictionary</span> <span class="nb">new</span><span class="p">.</span>
<span class="nv">d</span> <span class="nf">at:</span> <span class="s">'grün'</span> <span class="nf">put:</span> <span class="s">'green'</span><span class="p">.</span>
<span class="nv">d</span> <span class="nf">at:</span> <span class="s">'blau'</span> <span class="nf">put:</span> <span class="s">'blue'</span><span class="p">.</span>
<span class="nv">d</span> <span class="nf">at:</span> <span class="s">'rot'</span> <span class="nf">put:</span> <span class="s">'red'</span><span class="p">.</span>

<span class="nc">Transcript</span> <span class="nf">show:</span> (<span class="nv">d</span> <span class="nf">at:</span> <span class="s">'blau'</span>)<span class="p">.</span>
</pre></div>
<p>Alternativ können die Nachrichten auch wie bereits beschrieben verkettet werden:
</p>
<div class="mw-highlight mw-highlight-lang-smalltalk mw-content-ltr" dir="ltr"><pre><span></span> <span class="nv">d</span> <span class="o">:=</span> <span class="nc">Dictionary</span> <span class="nb">new</span><span class="p">.</span>
<span class="nv">d</span> <span class="nf">at:</span> <span class="s">'grün'</span> <span class="nf">put:</span> <span class="s">'green'</span><span class="p">;</span>
<span class="nf">at:</span> <span class="s">'blau'</span> <span class="nf">put:</span> <span class="s">'blue'</span><span class="p">;</span>
<span class="nf">at:</span> <span class="s">'rot'</span> <span class="nf">put:</span> <span class="s">'red'</span><span class="p">.</span>

<span class="nc">Transcript</span> <span class="nf">show:</span> (<span class="nv">d</span> <span class="nf">at:</span> <span class="s">'blau'</span>)<span class="p">.</span>
</pre></div>
<p>Auch das <i>Dictionary</i> ist eine Unterklasse von <i>Collection</i>.
Diese Datenstruktur entspricht dem <a href="Assoziatives_Datenfeld" class="mw-redirect" title="Assoziatives Datenfeld">assoziativen Array</a> in anderen Programmiersprachen.
</p>
<div class="mw-heading mw-heading2"><h2 id="Schreibweise">Schreibweise</h2></div>
<p>Smalltalk wird mit kleinem <i>t</i> geschrieben. Häufig findet sich die falsche Schreibweise <i>SmallTalk</i>, selbst auf den offiziellen IBM-Webseiten, wenn auch nicht durchgehend.
</p>
<div class="mw-heading mw-heading2"><h2 id="Implementierungen">Implementierungen</h2></div>
<ul><li><a rel="nofollow" class="external text" href="https://www.amber-lang.net/">Amber Smalltalk</a> – plattformunabhängige Entwicklungsumgebung die auf JavaScript aufsetzt.</li>
<li><a rel="nofollow" class="external text" href="http://www.cincomsmalltalk.com/main/">Cincom Smalltalk</a> – Smalltalk-Dialekt der Firma Cincom. Angeboten werden folgende Umgebungen:
<ul><li><a rel="nofollow" class="external text" href="http://www.cincomsmalltalk.com/main/products/objectstudio/">ObjectStudio</a> – Entwicklungsumgebung für Microsoft Windows mit COM- und ODBC-Schnittstellen.</li>
<li><a rel="nofollow" class="external text" href="http://www.cincomsmalltalk.com/main/products/visualworks/">VisualWorks</a> – multiplattformfähig, eine kostenlose Version für den privaten Einsatz ist verfügbar.</li></ul></li>
<li><a rel="nofollow" class="external text" href="https://cuis.st/">Cuis Smalltalk</a> – freies auf Übersichtlichkeit getrimmtes Smalltalk-System.</li>
<li><a rel="nofollow" class="external text" href="http://haver.klix.ch/index.html">Haver Smalltalk</a> eine Erweiterung von Cuis, mit einem vollständigen Modul-System.</li>
<li><a rel="nofollow" class="external text" href="http://www.object-arts.com/dolphin7.html">Dolphin Smalltalk</a> – Smalltalk-Umgebung für Windows.</li>
<li><a rel="nofollow" class="external text" href="http://smalltalk.gnu.org/">GNU Smalltalk</a> – freies Smalltalk des GNU-Projekts.</li>
<li><a rel="nofollow" class="external text" href="https://www.littlesmalltalk.org/">LittleSmalltalk</a> – freie Implementierung basierend auf Timothy A. Budds Ideen.</li>
<li><a rel="nofollow" class="external text" href="https://www.lesser-software.com/lswvst.htm">LSW Vision-Smalltalk</a> – proprietäres Smalltalk für Windows.</li>
<li><a href="Pharo_(Programmiersprache)" title="Pharo (Programmiersprache)">Pharo (Programmiersprache)</a> – eine nach softwaretechnischen Maßstäben entwickelte Abspaltung von Squeak.</li>
<li><a rel="nofollow" class="external text" href="https://www.gnustep.org/experience/StepTalk.html">StepTalk</a> – <a href="GNUstep" title="GNUstep">GNUstep</a> und Mac OS X Scripting-Framework.</li>
<li><a rel="nofollow" class="external text" href="https://www.squeak.org/">Squeak</a> – freie plattformunabhängige Implementierung.</li>
<li><a rel="nofollow" class="external text" href="https://code.google.com/p/syx/">Syx</a> – eine weitere freie Smalltalk-Implementierung.</li>
<li><a rel="nofollow" class="external text" href="https://www.smalltalk-x.de/">Smalltalk/X</a> – Smalltalk der Firma eXept Software AG (kostenlos verfügbar, auch für kommerzielle Projekte).</li>
<li><a rel="nofollow" class="external text" href="http://www.objectconnect.com/">Smalltalk MT bei Object Connect</a> oder <a rel="nofollow" class="external text" href="http://www.genify.com/">Smalltalk MT bei Genify</a> – ein C++-naher Smalltalk-Dialekt.</li>
<li><a rel="nofollow" class="external text" href="https://www.strongtalk.org/">Strongtalk</a> – freie (open source) Smalltalk-Implementierung für Microsoft Windows.</li>
<li><a rel="nofollow" class="external text" href="https://www-4.ibm.com/software/ad/smalltalk/">VisualAge for Smalltalk</a> – Smalltalk-Umgebung von IBM (eingestellt, der Nachfolger ist <a rel="nofollow" class="external text" href="https://www.instantiations.com/VAST/">VAST</a>).</li>
<li><style data-mw-deduplicate="TemplateStyles:r261891140">
/* start https://de.wikipedia.org/ */


.mw-parser-output .webarchiv-memento a{color:inherit}


/* end https://de.wikipedia.org/ */
</style><a rel="nofollow" class="external text" href="https://web.archive.org/web/20050306075224/http://www.oovm.com/">OOVM</a> (<span class="webarchiv-memento"><a href="Webarchivierung#Begrifflichkeiten" title="Webarchivierung">Memento</a></span> vom 6. März 2005 im <i><a href="Internet_Archive" title="Internet Archive">Internet Archive</a></i>)<sup id="cite_ref-13" class="reference"><a href="#cite_note-13"><span class="cite-bracket">[</span>13<span class="cite-bracket">]</span></a></sup> von <a href="Lars_Bak_(Informatiker)" title="Lars Bak (Informatiker)">Lars Bak</a> et al. Smalltalk-Implementierung für <a href="Eingebettetes_System" title="Eingebettetes System">eingebettete Systeme</a>, die ohne darunterliegendes Betriebssystem auskommt und im laufenden Betrieb aktualisierbar ist.</li>
<li>Bluebook-Implementationen von Smalltalk-80 in C++: von <a rel="nofollow" class="external text" href="https://github.com/dbanay/smalltalk">dbanay</a> und <a rel="nofollow" class="external text" href="https://github.com/rochus-keller/Smalltalk/">rochus-keller</a> auf github</li></ul>
<div class="mw-heading mw-heading2"><h2 id="Siehe_auch">Siehe auch</h2></div>
<ul><li><a href="Objective-C" title="Objective-C">Objective-C</a></li>
<li><a href="Self_(Programmiersprache)" title="Self (Programmiersprache)">Self (Programmiersprache)</a></li>
<li><a href="Slate_(Programmiersprache)" title="Slate (Programmiersprache)">Slate (Programmiersprache)</a></li>
<li><a href="Scratch_(Programmiersprache)" title="Scratch (Programmiersprache)">Scratch (Programmiersprache)</a></li></ul>
<div class="mw-heading mw-heading2"><h2 id="Literatur">Literatur</h2></div>
<ul><li>Adele Goldberg: <i>Smalltalk-80, The Interactive Programming Environment.</i> Addison-Wesley, 1983, ISBN 0-201-11372-4.</li>
<li>Glen Krasner: <i>Smalltalk-80, Bits of History, Words of Advice.</i> Addison-Wesley, 1983, ISBN 0-201-11669-3.</li>
<li>Johannes Brauer: <i>Grundkurs Smalltalk · Objektorientierung von Anfang an. Eine Einführung in die Programmierung.</i> 4. Auflage. Springer Vieweg, 2014, ISBN 978-3-658-00630-3.</li>
<li>Sherman R. Alpert, Kyle Brown, Bobby Woolf: <i>The Design Patterns Smalltalk Companion.</i> Addison-Wesley Professional, 1998, ISBN 0-201-18462-1.</li>
<li>Mark J. Guzdial: <i>Squeak: Object-Oriented Design with Multimedia Applications.</i> Prentice Hall, 2000, ISBN 0-13-028028-3.</li>
<li>Mark J. Guzdial, Kimberly M. Rose: <i>Squeak: Open Personal Computing and Multimedia.</i> Prentice Hall, 2001, ISBN 0-13-028091-7.</li>
<li>Günther Vinek: <i>Objektorientierte Softwareentwicklung mit Smalltalk.</i> Springer Verlag, 1997, ISBN 3-540-62558-5.</li>
<li>Simon Lewis: <i>The Art and Science of Smalltalk.</i> Prentice Hall, 1995, ISBN 0-13-371345-8.</li>
<li>Chamond Liu: <i>Smalltalk, Objects and Design.</i> iUniverse, 2000, ISBN 1-58348-490-6.</li>
<li>Peter P. Bothner, Wolf-Michael Kähler: <i>Smalltalk: Einführung in die objekt-orientierte Programmierung.</i> Vieweg+Teubner, 1998, ISBN 3-528-05700-9.</li></ul>
<div class="mw-heading mw-heading2"><h2 id="Weblinks">Weblinks</h2></div>
<ul><li><a rel="nofollow" class="external text" href="https://www.stic.st/">STIC</a> ist die Hersteller-unabhängige Lobby-Organisation</li>
<li><a rel="nofollow" class="external text" href="http://www.lisarein.com/alankay/tour.html">Vortrag von Alan Kay</a> auf der O'Reilly Etech 2003 Presentation</li>
<li><a rel="nofollow" class="external text" href="http://stephane.ducasse.free.fr/FreeBooks.html">Smalltalk-Bücher als PDF-Dokumente zum Herunterladen</a></li></ul>
<div class="mw-heading mw-heading2"><h2 id="Einzelnachweise">Einzelnachweise</h2></div>
<ol class="references">
<li id="cite_note-_7579ec16ab04dbc4-1"><span class="mw-cite-backlink"><a href="#cite_ref-_7579ec16ab04dbc4_1-0">↑</a></span> <span class="reference-text"><a rel="nofollow" class="external text" href="https://wiki.squeak.org/squeak/172"><cite style="font-style:italic">wiki.squeak.org</cite>.</a></span>
</li>
<li id="cite_note-2"><span class="mw-cite-backlink"><a href="#cite_ref-2">↑</a></span> <span class="reference-text"><span class="cite">Alan H. Borning, Daniel H.H. Ingalls: <a rel="nofollow" class="external text" href="https://cdn.aaai.org/AAAI/1982/AAAI82-056.pdf"><i>Multiple Inheritance in Smalltalk-80.</i></a> In: <i>AAAI.</i> Association for the Advancement of Artificial Intelligence, 1982,<span class="Abrufdatum"> abgerufen am 22.&nbsp;Januar 2025</span> (englisch).</span><span style="display: none;" class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Adc&amp;rfr_id=info%3Asid%2Fde.wikipedia.org%3ASmalltalk+%28Programmiersprache%29&amp;rft.title=Multiple+Inheritance+in+Smalltalk-80&amp;rft.description=Multiple+Inheritance+in+Smalltalk-80&amp;rft.identifier=https%3A%2F%2Fcdn.aaai.org%2FAAAI%2F1982%2FAAAI82-056.pdf&amp;rft.creator=Alan+H.+Borning%2C+Daniel+H.H.+Ingalls&amp;rft.publisher=Association+for+the+Advancement+of+Artificial+Intelligence&amp;rft.date=1982&amp;rft.language=en">&nbsp;</span></span>
</li>
<li id="cite_note-3"><span class="mw-cite-backlink"><a href="#cite_ref-3">↑</a></span> <span class="reference-text">Vgl. Alan C. Kay: <i>The early history of Smalltalk.</i> In: »ACM SIGPLAN notices«&nbsp;(Tagungsjournal), Band 28, No. 3, März 1993, Association for Computing Machinery, New York, S. 69 ff. – <a rel="nofollow" class="external text" href="https://web.archive.org/web/20120205105015/http://www.smalltalk.org/downloads/papers/SmalltalkHistoryHOPL.pdf">2004-0924-2355 (1999-0802-2121)</a> (<span class="webarchiv-memento"><a href="Webarchivierung#Begrifflichkeiten" title="Webarchivierung">Memento</a></span> vom 5. Februar 2012 im <i><a href="Internet_Archive" title="Internet Archive">Internet Archive</a></i>) (PDF; 3,9&nbsp;MB).</span>
</li>
<li id="cite_note-4"><span class="mw-cite-backlink"><a href="#cite_ref-4">↑</a></span> <span class="reference-text"><i><a href="https://en.wikipedia.org/wiki/VisualWorks" class="extiw external" title="en:VisualWorks">VisualWorks</a></i> in der englischsprachigen Wikipedia</span>
</li>
<li id="cite_note-5"><span class="mw-cite-backlink"><a href="#cite_ref-5">↑</a></span> <span class="reference-text"><i><a href="https://en.wikipedia.org/wiki/Cincom_Systems" class="extiw external" title="en:Cincom Systems">Cincom</a></i> in der englischsprachigen Wikipedia</span>
</li>
<li id="cite_note-6"><span class="mw-cite-backlink"><a href="#cite_ref-6">↑</a></span> <span class="reference-text"><span class="cite">Thomas Brey, Heiko Wagner: <a rel="nofollow" class="external text" href="https://vs-kb.apis.de/wp-content/uploads/2015/05/A-moribund-Smalltalk-still-alive-and-kicking.pdf"><i>A moribund Smalltalk still alive and kicking.</i></a> (PDF) In: <i>vs-kb.apis.de.</i> 29.&nbsp;August 2008,<span class="Abrufdatum"> abgerufen am 12.&nbsp;Januar 2023</span> (englisch, Informationen zu einem Vortrag auf der 16. ESUG-Konferenz, Amsterdam).</span><span style="display: none;" class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Adc&amp;rfr_id=info%3Asid%2Fde.wikipedia.org%3ASmalltalk+%28Programmiersprache%29&amp;rft.title=A+moribund+Smalltalk+still+alive+and+kicking&amp;rft.description=A+moribund+Smalltalk+still+alive+and+kicking&amp;rft.identifier=https%3A%2F%2Fvs-kb.apis.de%2Fwp-content%2Fuploads%2F2015%2F05%2FA-moribund-Smalltalk-still-alive-and-kicking.pdf&amp;rft.creator=Thomas+Brey%2C+Heiko+Wagner&amp;rft.date=2008-08-29&amp;rft.language=en">&nbsp;</span></span>
</li>
<li id="cite_note-7"><span class="mw-cite-backlink"><a href="#cite_ref-7">↑</a></span> <span class="reference-text"><a rel="nofollow" class="external text" href="https://web.archive.org/web/20110723005517/http://www.cincomsmalltalk.com/userblogs/cincom/blogView?content=vse">The Premiere Component-Based Development Environment for Windows 9X and Windows NT</a> (<span class="webarchiv-memento"><a href="Webarchivierung#Begrifflichkeiten" title="Webarchivierung">Memento</a></span> vom 23. Juli 2011 im <i><a href="Internet_Archive" title="Internet Archive">Internet Archive</a></i>) auf cincomsmalltalk.com (englisch)</span>
</li>
<li id="cite_note-8"><span class="mw-cite-backlink"><a href="#cite_ref-8">↑</a></span> <span class="reference-text"><a rel="nofollow" class="external text" href="https://web.archive.org/web/20070127022620/http://users.ipa.net/~dwighth/squeak/oopsla_squeak.html">Back to the Future: The Story of Squeak</a> (<span class="webarchiv-memento"><a href="Webarchivierung#Begrifflichkeiten" title="Webarchivierung">Memento</a></span> vom 27. Januar 2007 im <i><a href="Internet_Archive" title="Internet Archive">Internet Archive</a></i>)</span>
</li>
<li id="cite_note-9"><span class="mw-cite-backlink"><a href="#cite_ref-9">↑</a></span> <span class="reference-text"><a rel="nofollow" class="external text" href="https://www.windley.com/archives/2006/02/alan_kay_the_10.shtml"><i>Alan Kay: The $100 Laptop and Powerful Ideas</i></a>, Windleys Technometria, 23. Februar 2006.</span>
</li>
<li id="cite_note-10"><span class="mw-cite-backlink"><a href="#cite_ref-10">↑</a></span> <span class="reference-text"><a rel="nofollow" class="external text" href="https://www.computerwoche.de/a/smalltalk-spezialist-objectshare-verlaesst-die-buehne,1090899">computerwoche.de</a></span>
</li>
<li id="cite_note-11"><span class="mw-cite-backlink"><a href="#cite_ref-11">↑</a></span> <span class="reference-text"><span class="cite"><a rel="nofollow" class="external text" href="https://stackoverflow.com/questions/3561145/what-is-a-smalltalk-image"><i>terminology – What is a Smalltalk "image"?</i></a><span class="Abrufdatum"> Abgerufen am 11.&nbsp;August 2022</span> (englisch).</span><span style="display: none;" class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Adc&amp;rfr_id=info%3Asid%2Fde.wikipedia.org%3ASmalltalk+%28Programmiersprache%29&amp;rft.title=terminology+%E2%80%93+What+is+a+Smalltalk+%22image%22%3F&amp;rft.description=terminology+%E2%80%93+What+is+a+Smalltalk+%22image%22%3F&amp;rft.identifier=https%3A%2F%2Fstackoverflow.com%2Fquestions%2F3561145%2Fwhat-is-a-smalltalk-image&amp;rft.language=en">&nbsp;</span></span>
</li>
<li id="cite_note-12"><span class="mw-cite-backlink"><a href="#cite_ref-12">↑</a></span> <span class="reference-text"><span class="cite">Crystal Villanueva: <a rel="nofollow" class="external text" href="https://crystal-villanueva.medium.com/the-banana-and-the-gorilla-problem-92c9a4717fd6"><i>The Banana and the Gorilla Problem.</i></a> In: <i>Medium.</i> 18.&nbsp;Februar 2021,<span class="Abrufdatum"> abgerufen am 11.&nbsp;August 2022</span> (englisch).</span><span style="display: none;" class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Adc&amp;rfr_id=info%3Asid%2Fde.wikipedia.org%3ASmalltalk+%28Programmiersprache%29&amp;rft.title=The+Banana+and+the+Gorilla+Problem&amp;rft.description=The+Banana+and+the+Gorilla+Problem&amp;rft.identifier=https%3A%2F%2Fcrystal-villanueva.medium.com%2Fthe-banana-and-the-gorilla-problem-92c9a4717fd6&amp;rft.creator=Crystal+Villanueva&amp;rft.date=2021-02-18&amp;rft.language=en">&nbsp;</span></span>
</li>
<li id="cite_note-13"><span class="mw-cite-backlink"><a href="#cite_ref-13">↑</a></span> <span class="reference-text"><a rel="nofollow" class="external text" href="https://web.archive.org/web/20140315230642/http://javascriptjabber.com/008-jsj-v8-and-dart-with-lars-bak-and-kaspar-lund/">008 JSJ V8 and Dart with Lars Bak and Kasper Lund</a> (<span class="webarchiv-memento"><a href="Webarchivierung#Begrifflichkeiten" title="Webarchivierung">Memento</a></span> vom 15. März 2014 im <i><a href="Internet_Archive" title="Internet Archive">Internet Archive</a></i>), WOODY2SHOES am 14. März 2012.</span>
</li>
</ol></div><!--htdig_noindex--><div><div class="zim-footer">
Dieser Artikel wurde von <a class="external text" title="Zuletzt bearbeitet am 2025-09-30" href="https://de.wikipedia.org/wiki/?title=Smalltalk_(Programmiersprache)&amp;oldid=260199599">Wikipedia</a> herausgegeben. Der Text ist unter <a class="external text" href="https://creativecommons.org/licenses/by-sa/4.0/deed.de">Creative Commons Attribution-Share Alike 4.0</a> verfügbar, sofern nicht anders angegeben. Für die Mediendateien können zusätzliche Bedingungen gelten.
</div>
</div><!--/htdig_noindex--></div>
</div>
</main>
</div>
</div>
</div>
<script src="./_webp_/webpHandler.js"></script>

</body></html>